home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
TEX-UTIL
/
TR2LATEX
/
c
/
tr2latex
(
.txt
)
< prev
next >
Wrap
LaTeX Document
|
1992-05-16
|
8KB
|
246 lines
** tr2latex - troff to LaTeX converter
** $Id: tr2latex.c,v 2.2 1992/04/27 15:13:26 Christian_Engel Dist krischan $
** COPYRIGHT (C) 1987 Kamal Al-Yahya, 1991,1992 Christian Engel
** Module: tr2latex.c
** This module contains the main function inititating the translation
** and supporting the Usage.
char *usage_doc[] = {
"tr2latex - troff to LaTeX converter, $Revision: 2.2 $",
"SYNTAX: tr2latex [-m] [-t] [-<n>] [-s <style>] [-o <outfile>] [<file>...]",
"options: -m for manual",
" -t twoside page style",
" -h use helvetica style option",
" -<n> a number n gives the font size (default is 12pt",
" for man, 11pt otherwise)",
" -s <style> use documentstyle <style> (default is article)",
" -o <outfile> send output to <outfile> (default is stdout)",
#ifdef DEBUG
" -do debug output",
" -dv verbose informations",
#endif
#define MAIN
#include "setups.h"
#include "protos.h"
#ifdef __TURBOC__
/*--- The Turbo C stack needs to be increased in size,
6k seems to be enough; 4k is not ---*/
extern unsigned _stklen = 0x1800 ;
#endif
extern char *mktemp();
char scratch_file[MAXWORD];
bool man, /* option -m: manual page */
fontsize, /* option -9/-10/-11/-12: font size */
twoside, /* option -t: twoside */
piped_in,
helvetica;
char *document = "article"; /* document type, see also -s option */
extern char version [];
FILE *out_file; /* in case they can't use *NIX redirecting or piping */
char *prgname;
char inbuf[MAXLEN],
outbuf[MAXLEN];
int main (int argc, char *argv[])
char *pin = inbuf,
*pout = outbuf;
FILE *in_file;
long timeval; /* clock value from time() for ctime() */
int argi;
prgname = argv [0];
out_file = stdout; /* default output */
/* process option flags */
getopts (&argc, argv);
#ifdef DEBUG
if (debug_v) {
printf ("Arguments:");
for (argi = 1; argi < argc; argi++)
printf (" %s", argv [argi]);
putchar ('\n');
#endif
#ifdef VMS
if ((out_file == stdout) &&
((out_file = freopen ("Sys$Output:", "w", stdout,
"rat=cr", "rfm=var")) == NULL)) {
fprintf (stderr, "Can't reopen stdout\n");
errexit (GOOD);
#endif
/* initialize spacing and indentation parameters */
strcpy(linespacing.def_units,"\\normalbaselineskip");
strcpy(linespacing.old_units,"\\normalbaselineskip");
strcpy(indent.def_units,"em");
strcpy(indent.old_units,"em");
strcpy(tmpind.def_units,"em");
strcpy(tmpind.old_units,"em");
strcpy(space.def_units,"\\baselineskip");
strcpy(space.old_units,"\\baselineskip");
strcpy(vspace.def_units,"pt");
strcpy(vspace.old_units,"pt");
linespacing.value = 1.;
linespacing.old_value = 1.;
indent.value = 0.;
indent.old_value = 0.;
tmpind.value = 0.;
tmpind.old_value = 0.;
space.value = 1.;
space.old_value = 1.;
vspace.value = 1.;
vspace.old_value = 1.;
linespacing.def_value = 0;
indent.def_value = 0;
tmpind.def_value = 0;
space.def_value = 1;
vspace.def_value = 1;
math_mode = 0; /* start with non-math mode */
de_arg = 0; /* not a .de argument */
/* start of translated document */
timeval = time(0);
fprintf (out_file,
"%% -*-LaTeX-*-\n\
%% Converted automatically from troff to LaTeX\n\
%% by %s\n\
%% on %s\
%% tr2latex was written by Kamal Al-Yahya at Stanford University\n\
%% (Kamal%%Hanauma@SU-SCORE.ARPA)\n\
%% and substantially enhanced by Christian Engel at RWTH Aachen\n\
%% (krischan@informatik.rwth-aachen.de).\n\
%%\n\
%% troff input file%s:%s",
version, ctime(&timeval),
argc>2?"s":"",
argc==1?" <stdin>":"");
for (argi = 1; argi < argc; argi++) {
if (strcmp (argv [argi], "-") == 0)
fprintf (out_file, " <stdin>");
else
fprintf (out_file, " %s", argv[argi]);
/* document style and options */
fprintf (out_file,"\n\n\\documentstyle[%s", man? "troffman": "troffms");
if (fontsize == 0 && !man)
fontsize = 11;
if (fontsize != 0)
fprintf (out_file,",%dpt", fontsize);
if (helvetica)
fputs (",helvetica", out_file);
if (twoside)
fputs (",twoside", out_file);
fprintf (out_file,"]{%s}\n\\begin{document}\n", document);
if (argc == 1)
process (stdin, "<stdin>", pin, pout);
else {
for (argv++; --argc; argv++) {
if (strcmp (*argv, "-") == 0)
process (stdin, "<stdin>", pin, pout);
else if ((in_file = fopen(*argv,"r")) == NULL)
fprintf(stderr,"%s: Cannot open input file `%s'\n",
prgname,*argv);
else {
process (in_file, *argv, pin, pout);
fclose(in_file);
/* close translated document */
fputs("\\end{document}\n",out_file);
exit(GOOD);
void process (FILE *in_file, char *f_name, char *pin, char *pout)
static char sep[] = "--------------------------------------------------";
tmpbuf (in_file, pin);
fprintf (out_file, "%%%s\n%% start of input file: %s\n%%\n", sep, f_name);
troff_tex (pin, pout, 0, 0);
fputs (pout, out_file);
fprintf (out_file, "%%\n%% end of input file: %s\n%%%s\n", f_name, sep);
# define shift_arg(cnt) for (i = argind; i < *p_argc - cnt; i++) \
argv [i] = argv [i + cnt]; \
argind -= cnt; \
*p_argc -= cnt;
void getopts (int *p_argc, char *argv[])
char *p_opt;
int argind, i;
for (argind = 1; argind < *p_argc; argind ++)
if (*argv [argind] == '-') {
if (strcmp (argv+1, "help") == 0)
usage (0);
for (p_opt = argv [argind] + 1; ; p_opt++) {
switch (*p_opt) {
case '\0':
if (p_opt != argv [argind] + 1) {
shift_arg (1);
}
break;
case 'h':
helvetica = 1;
continue;
case 'm':
man = 1;
continue;
case 't':
twoside = 1;
continue;
case 's':
document = argv [argind+1];
shift_arg(2);
continue;
case '9':
fontsize = 9;
continue;
case 'o':
if (argind + 1 >= *p_argc) {
fprintf (stderr, "%s: Missing output file name\n",
prgname);
usage (1);
}
#ifdef VMS
if ((out_file = fopen(argv[argind+1],"w",
"rat=cr","rfm=var")) == NULL)
#else
if ((out_file = fopen(argv[argind+1],"w")) == NULL)
#endif
{
fprintf(stderr, "%s: can't open %s\n",
prgname, argv [argind+1]);
usage (errno);
}
shift_arg(2);
break;
#ifdef DEBUG
case 'd':
if (*++p_opt == '\0') {
fprintf (stderr, "%s: missing debug option\n",
prgname);
usage (1);
}
switch (*p_opt) {
case 'o':
debug_o = 1;
break;
case 'v':
debug_v = 1;
break;
default:
fprintf (stderr, "%s: unknown debug option %c\n",
prgname, *p_opt);
usage (1);
}
continue;
#endif
case '?':
usage (0);
case '1':
if (isdigit (p_opt [1])) {
fontsize = 10 + *++p_opt - '0';
continue;
}
/* NO BREAK */
default:
fprintf (stderr,"%s: Unknown option %c\n",prgname,*p_opt);
usage (1);
}
break;
}
void usage (int exitcode)
int i;
printf ("tr2latex (c) 1986/1987 Kamal Al-Yahya, 1991 C. Engel\nVersion %s\n",
version);
for (i=0; usage_doc [i]; i++)
printf ("%s\n", usage_doc [i]);
exit (exitcode);
void errexit (int exitcode)
fprintf (stderr, "%s: Error #%03d ", prgname, exitcode);
exit (exitcode);